package com.utils.jedis;

import java.util.List;

import com.utils.JedisClient;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisClientUser implements JedisClient {
    
	
	private JedisPool jedispool;
	
	public JedisClientUser() {
		if(jedispool == null) {
			JedisPoolConfig config = new JedisPoolConfig();
			//控制一个pool可分配多少个jedis实例，通过pool.getResource()来获取；
            //如果赋值为-1，则表示不限制；如果pool已经分配了maxActive个jedis实例，则此时pool的状态为exhausted(耗尽)。
			config.setMaxTotal(500);
			//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
			config.setMaxIdle(5);
			//表示当borrow(引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；单位毫秒
			config.setMaxWaitMillis(1000*100);
			//在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
			config.setTestOnBorrow(true);
			
			jedispool = new JedisPool(config, "127.0.0.1", 6379,  50000);
		}
	}
	
	@Override
	public String get(String key) {
		Jedis jedis = jedispool.getResource();
		String s = jedis.get(key);
		jedis.close();
		return s;
	}
    
	@Override
	public String set(String key, String value) {
		Jedis jedis = jedispool.getResource();
		String s = jedis.set(key, value);
		jedis.close();
		return s;
	}
	
	@Override
	public String set(String key, String value, String note, String expx ,long time){
		Jedis jedis = jedispool.getResource();
		String s = jedis.set(key,value,note,expx,time);
		jedis.close();
		return s;
	}
	
	@Override
	public String hget(String hkey, String key) {
		// TODO Auto-generated method stub
		Jedis jedis = jedispool.getResource();
		String s = jedis.hget(hkey, key);
		jedis.close();
		return s;
	}

	@Override
	public long hset(String hkey, String key, String value) {
		// TODO Auto-generated method stub
		Jedis jedis = jedispool.getResource();
		Long result = jedis.hset(hkey, key, value);
		jedis.close();
		return result;
	}
	
	@Override
	public long incr(String key) {
		// TODO Auto-generated method stub
		Jedis jedis = jedispool.getResource();
		Long result = jedis.incr(key);
		return result;
	}

	@Override
	public long expire(String key, int sec) {
		// TODO Auto-generated method stub
		Jedis jedis = jedispool.getResource();
		Long result = jedis.expire(key, sec);
		jedis.close();
		return result;
	}
	
	@Override
	public long ttl(String key){
		Jedis jedis = jedispool.getResource();
		Long result = jedis.ttl(key);
		jedis.close();
		return result;
	}

	@Override
	public long del(String key) {
		// TODO Auto-generated method stub
		Jedis jedis = jedispool.getResource();
		Long result = jedis.del(key);
		jedis.close();
		return result;
	}

	@Override
	public long hdel(String hkey, String key) {
		// TODO Auto-generated method stub
		Jedis jedis = jedispool.getResource();
		Long result = jedis.hdel(hkey,key);
		jedis.close();
		return result;
	}

	@Override
	public List<String> hvals(String key) {
		// TODO Auto-generated method stub
		Jedis jedis = jedispool.getResource();
		List<String> values=jedis.hvals(key);
		jedis.close();
		return values;
	}
	
//	@Override
//	public void setex(String key, int seconds, String value) {
//		// TODO Auto-generated method stub
//		Jedis jedis = jedispool.getResource();
//		jedis.setex(key, seconds, value);
//		this.jedispool.returnResource(jedis);
//	}
//	

	

}
